<?php

declare(strict_types=1);

namespace app\admin\controller;

use app\utils\ResData;
use app\admin\model\RoleModel;
use app\admin\model\AdminModel;

class Admin
{
    // 使用检查登录、检查权限中间件
    protected $middleware = ['checklogin', 'checkpower'];


    /**
     * 管理员列表
     */
    public function list()
    {
        $list = AdminModel::with('role')->order('id desc')->select();
        return view('admin/index', array('admins' => $list));
    }

    /**
     * 显示添加管理员页面
     */
    public function add()
    {
        $roles = RoleModel::field('id,name')->select();

        // 返回添加管理员页面
        return view('admin/add', ['roles' => $roles]);
    }


    /**
     * 提交添加管理员用户
     */
    public function save()
    {
        $username = trim(input('post.username', ''));
        $password = trim(input('post.password', ''));
        $realname = trim(input('post.realname', ''));
        $role_id = (int)input('post.role', 0);
        $status = (int)input('post.status', 0);
        if (empty($username)) {
            return json(ResData::res(400, '用户名不能为空'));
        }
        if (empty($password)) {
            return json(ResData::res(400, '密码不能为空'));
        }
        if (empty($realname)) {
            return json(ResData::res(400, '姓名不能为空'));
        }

        $encode_password = md5($username . $password);
        $item = AdminModel::where('username', $username)->findOrEmpty();
        if (!$item->isEmpty()) {
            return json(ResData::res(400, '用户已存在'));
        }

        $admin = new AdminModel();
        $res = $admin->save(['username' => $username, 'role_id' => $role_id, 'password' => $encode_password, 'realname' => $realname, 'status' => $status]);
        if (!$res) {
            return json(ResData::res(500, '添加失败'));
        }
        return json(ResData::res(200, '添加成功'));
    }


    /**
     * 编辑修改管理员
     */
    public function edit()
    {
        if (request()->isPut()) {
            $id = (int)input('id', 0);
            $username = trim(input('username', ''));
            $password = trim(input('password', ''));
            $realname = trim(input('realname', ''));
            $status = (int)input('status', 0);

            if (empty($username)) {
                return json(ResData::res(400, '用户名不能为空'));
            }
            if (empty($realname)) {
                return json(ResData::res(400, '姓名不能为空'));
            }

            // 密码不为空，要修改密码
            if (!empty($password)) {
                $encode_password = md5($username . $password);
                $res = AdminModel::where('id', $id)->update(['password' => $encode_password, 'realname' => $realname, 'status' => $status]);
            }
            // 密码为空，不修改密码
            $res = AdminModel::where('id', $id)->update(['realname' => $realname, 'status' => $status]);

            if (!$res) {
                return json(ResData::res(500, '操作失败'));
            }
            return json(ResData::res(200, '操作成功'));
        }


        // get请求返回页面
        $user = AdminModel::where('id', input('id', 0))->findOrEmpty();
        if ($user->isEmpty()) {
            return json(ResData::res(404, '用户不存在'), 404);
        }
        return view('admin/edit', ['user' => $user]);
    }

    /**
     * 删除
     */
    public function del()
    {
        $id = input('id', 0);

        $res = AdminModel::destroy($id);
        if (!$res) {
            return json(ResData::res(500, '操作失败'));
        }
        return json(ResData::res(200, '操作成功'));
    }
}